#!/usr/bin/env python
# -*- coding: utf-8 -*-


def install_nagios_nrpe():
    """ Instala y configura un servidor nrpe Nagios"""
    VAR = {}
    CORES = {   "1":"-w 1.5,1.1,0.9 -c 2,1.5,1",
                "2":"-w 3,2.2,1.8 -c 4,3,2.2",
                "3":"-w 4.5,3.3,2.7 -c 6,4.5,3.3",
                "4":"-w 6,4.4,3.6 -c 8,6,4.4",
                "5":"-w 7.5,5.5,4.5 -c 10,7.5,5.5",
                "6":"-w 9,6.6,5.4 -c 12,9,6.6",
                "7":"-w 10.5,7.7,6.3 -c 14,10.2,7.7",
                "8":"-w 12,8.8,7.2 -c 16,12,8.8",
            }
    CONFIG_FILE="/etc/nagios/nrpe_local.cfg"
    APT_CONFIG_FILE="/etc/apt/apt.conf"
    APT_TEMPLATE_FILE="./templates/nagios/apt.conf"            
    DAEMON="/etc/init.d/nagios-nrpe-server"
    mode_sudo()
    package_ensure("nagios-nrpe-server", True)
    
    IP_NAGIOS = raw_input('IPs de la máquinas desde las que se consultará: ')
    #Porcedemos a cambiar la configuración
    if file_exists(CONFIG_FILE):
        save_original(CONFIG_FILE)
        #Hecha la copia de borra el original
        run("rm " + CONFIG_FILE)
    
    add_str2file("allowed_hosts=" + IP_NAGIOS, CONFIG_FILE)
    add_str2file("command[check_users]=/usr/lib/nagios/plugins/check_users -w 0 -c 4", CONFIG_FILE)
    add_str2file("command[check_apt]=/usr/lib/nagios/plugins/check_apt", CONFIG_FILE)

    if file_exists(APT_CONFIG_FILE):
        save_original(APT_CONFIG_FILE)
        #Hecha la copia de borra el original
        run("rm " + APT_CONFIG_FILE)
    file_append(APT_CONFIG_FILE,local_read(APT_TEMPLATE_FILE),"600","root","root")
    
    add_str2file("command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z", CONFIG_FILE)
    add_str2file("command[check_hdd_root]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /", CONFIG_FILE)
    N_CORES = raw_input('Número de cores o núcleos que tiene la máquina: ')
    if CORES.has_key(N_CORES):
        add_str2file("command[check_load]=/usr/lib/nagios/plugins/check_load " + CORES[N_CORES], CONFIG_FILE)
    else:
        print "No has introducido un número de cores válido [1,2,3,4,5,6,7,8] - No se añade command" 

    if confirm("¿Partición /server?:"):
        add_str2file("command[check_hdd_server]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /server", CONFIG_FILE)
    if confirm("¿Tiene Raids?:"):
        add_str2file("command[check_raids]=/usr/lib/nagios/plugins/check_linux_raid", CONFIG_FILE)
    
    run(DAEMON + " reload")

def add_nagios_host():
    """Añade un nuevo host a monitorizar en el Nagios"""
    PATH="/etc/nagios3/servers/"
    DAEMON="/etc/init.d/nagios3"
    HOST_TEMPLATE="./templates/nagios/nagios_host.cfg"
    SERVICE_TEMPLATE="./templates/nagios/nagios_service.cfg"
    NAGIOS_REEMPLAZO = {
            "HOST_NAME": "hostname",
            "HOST_IP":"", 
            "HOST_PARENT":"",
            "SERV_DESC":"",
            "CHECK_COMM":"",
            }

    tmp=''
    
    tmp = raw_input('Path donde seguarda el host [' + PATH + ']: ')
    if tmp:
        PATH = tmp
    tmp = raw_input('Nombre del host: ')
    if tmp:
        NAGIOS_REEMPLAZO['HOST_NAME'] = tmp
    tmp = raw_input('IP host: ')
    if tmp:
        NAGIOS_REEMPLAZO['HOST_IP'] = tmp
    tmp = raw_input('Nombre del host parent: ')
    if tmp:
        NAGIOS_REEMPLAZO['HOST_PARENT'] = tmp

    FILE=PATH + NAGIOS_REEMPLAZO['HOST_NAME'] + ".cfg"
    mode_sudo()
    if file_exists(FILE):
        if confirm("Ya existe un host con ese nombre. ¿Lo quieres reemplezar?: "):
            save_original(FILE)
            #Hecha la copia de borra el original
            run("rm " + FILE)
        else:
            exit
    
    file_append(FILE,remplaza_strstr(local_read(HOST_TEMPLATE),NAGIOS_REEMPLAZO),"644","root","root")
    
    if confirm("¿Tiene partición /server?: "):
        NAGIOS_REEMPLAZO['SERV_DESC']="Disk Space /server"
        NAGIOS_REEMPLAZO['CHECK_COMM']="check_nrpe_1arg!check_hdd_server"
        file_append(FILE,remplaza_strstr(local_read(SERVICE_TEMPLATE),NAGIOS_REEMPLAZO))
    
    if confirm("¿Tiene raids?: "):
        NAGIOS_REEMPLAZO['SERV_DESC']="Raids"
        NAGIOS_REEMPLAZO['CHECK_COMM']="check_nrpe_1arg!check_raids"
        file_append(FILE,remplaza_strstr(local_read(SERVICE_TEMPLATE),NAGIOS_REEMPLAZO))

    # Reiniciamos el demonio
    run(DAEMON + " restart")
